/* DTermin.java
 *
 * Author:	Malcolm Staudacher
 * Date:	Apr 27, 2008
 *
 */

package ocumed.domaene.terminverwaltung;

import java.util.Calendar;
import java.util.Date;
import java.util.Set;

import ocumed.domaene.benutzerverwaltung.arztverwaltung.DArzt;
import ocumed.domaene.patientenverwaltung.DPatient;
import ocumed.teams.IArzt;
import ocumed.teams.IBenutzer;
import ocumed.teams.IPatient;
import ocumed.teams.ITermin;
import ocumed.teams.IWarteposition;

/**
 * provides functionality for an appointment. requires domain references:
 * DArzt, DTerminArt, DPatient for instantiation
 * 
 * @author Malcolm Staudacher
 *
 */
public class DTermin implements Comparable<DTermin>, ITermin {
    // references
    private DArzt m_arzt;
    private DTerminArt m_terminArt;
    private IPatient m_patient;
    // attributes
	private int m_terminID;
	private Calendar m_terminZeitpunkt;
	private int m_terminDauer;
	private boolean m_mitVorbehandlung;
	private boolean m_wahrgenommen;
	private String m_terminText;
	private boolean m_dirty; // needed for persistence management

	public DTermin(int terminID, DArzt arzt, DTerminArt terminArt,
			DPatient patient, Calendar terminZeit, int terminDauer,
			boolean mitVorbehandlung, boolean wahrgenommen, String text) {	
		m_arzt = arzt;
		m_terminArt = terminArt;
		m_patient = patient;
		
		m_terminID = terminID;
		m_terminZeitpunkt = terminZeit;
		m_terminDauer = terminDauer;
		m_mitVorbehandlung = mitVorbehandlung;
		m_wahrgenommen = wahrgenommen;
		m_terminText = text;
		m_dirty = false;
	}
	
	
	public DTermin(DArzt arzt, DTerminArt terminArt,
			DPatient patient, Calendar terminZeit, int terminDauer,
			char mitVorbehandlung, char wahrgenommen, String text) {
		m_arzt = arzt;
		m_terminArt = terminArt;
		m_patient = patient;
		m_terminZeitpunkt = terminZeit;
		m_terminDauer = terminDauer;
		
		if (mitVorbehandlung == '0') {
			m_mitVorbehandlung = false;
		} else {
			m_mitVorbehandlung = true;
		}
		
		if (wahrgenommen == '0') {
			m_wahrgenommen = false; 
		} else {
			m_wahrgenommen = true;
		}

		m_terminText = text;
		m_dirty = false;
	}

	/* Anfang Timebox 3 */	
	public boolean istZukuenftig() {
		return Calendar.getInstance().before(m_terminZeitpunkt);
	}
	/* Ende Timebox 3 */
	
	
	public int getTerminid() {
		return m_terminID;
	}


	public void setTerminid(int terminid) {
		m_terminID = terminid;
	}
	

	public DArzt getArzt() {
		return m_arzt;
	}

	
	public IArzt getiArzt() {
		return m_arzt;
	}


	public void setArzt(DArzt arzt) {
		m_arzt = arzt;
	}
	
	
	public void setiArzt(IBenutzer benutzer) {
		// TODO implement (setArzt)?
	}

	
	public DTerminArt getTerminart() {
		return m_terminArt;
	}


	public void setTerminart(DTerminArt terminart) {
		m_terminArt = terminart;
	}


	public IPatient getPatient() {
		return m_patient;
	}


	public void setPatient(DPatient patient) {
		m_patient = patient;
	}


	public Calendar getTerminZeitpunkt() {
		return m_terminZeitpunkt;
	}
	
	
	public Date getTerminzeitpunkt() {
		return m_terminZeitpunkt.getTime();
	}


	public void setTerminZeitpunkt(Calendar terminZeitpunkt) {
		m_terminZeitpunkt = terminZeitpunkt;
	}
	
	
	public void setTerminzeitpunkt(Date terminzeitpunkt) {
		m_terminZeitpunkt.setTime(terminzeitpunkt);		
	}
	
	
	public Calendar getTerminEnde() {
		Calendar ende = (Calendar) m_terminZeitpunkt.clone();
		ende.add(Calendar.MINUTE, getTermindauer());
		return ende;
	}


	public void setTermindauer(int termindauer) {
		m_terminDauer = termindauer;
	}


	public Boolean getTerminmitvorbehandlung() {
		return m_mitVorbehandlung;
	}


	public void setTerminmitvorbehandlung(Boolean terminmitvorbehandlung) {
		m_mitVorbehandlung = terminmitvorbehandlung;
	}


	public Boolean getTerminwahrgenommen() {
		return m_wahrgenommen;
	}


	public void setTerminwahrgenommen(Boolean terminwahrgenommen) {
		m_wahrgenommen = terminwahrgenommen;
	}


	public String getTermintext() {
		return m_terminText;
	}


	public void setTermintext(String termintext) {
		m_terminText = termintext;
	}


	public int compareTo(DTermin t) {
		
		if (m_terminZeitpunkt.before(t.m_terminZeitpunkt)) {
			return -1;
		} else if (m_terminZeitpunkt.after(t.m_terminZeitpunkt)) {
			return 1;
		}
			
		return 0;
	}


	public boolean isDirty() {
		return m_dirty;
	}


	public void setDirty(boolean dirty) {
		m_dirty = dirty;
	}


	public int getTermindauer() {
		return m_terminDauer;
	}


	public Set<IWarteposition> getWartepositions() {
		// TODO Auto-generated method stub
		return null;
	}


	public void setPatient(IPatient patient) {
		m_patient = patient;		
	}


	public void setWartepositions(Set<IWarteposition> wartepositions) {
		// TODO Auto-generated method stub
		
	}

}
